package cn.iocoder.yudao.framework.common.util.amount;

import java.math.BigDecimal;

public class AmountUtils {


    /**
     * 转换金额为字符串类型（如果小数点后不够3个0会补充，但是不会截取非0小数点）
     *
     * @param amount
     * @return
     */
    public static String formatAmount(String amount) {
        return formatAmount(new BigDecimal(amount));
    }

    /**
     * 转换金额为字符串类型（如果小数点后不够3个0会补充，但是不会截取非0小数点）
     *
     * @param amount
     * @return
     */
    public static String formatAmount(BigDecimal amount) {
        if (amount == null) {
            return null;
        }

        // 获取BigDecimal的原始字符串表示
        final String original = amount.stripTrailingZeros().toPlainString();

        // 查找小数点的位置
        final int dotIndex = original.indexOf('.');

        if (dotIndex == -1) {
            // 如果没有小数点，补充.000
            return original + ".000";
        } else {
            // 如果有小数点，计算小数部分的长度
            int decimalPlaces = original.length() - dotIndex - 1;
            if (decimalPlaces < 3) {
                // 如果小数部分长度不足3，补充相应的0
                final StringBuilder sb = new StringBuilder(original);
                for (int i = 0; i < 3 - decimalPlaces; i++) {
                    sb.append('0');
                }
                return sb.toString();
            } else {
                // 如果小数部分长度大于等于3，保留前三位小数，去除多余的0
                final String fractionalPart = original.substring(dotIndex + 1);
                if (fractionalPart.length() > 3) {
                    final String remainingPart = fractionalPart.substring(3);

                    // 检查多余部分是否全是0
                    if (remainingPart.matches("0*")) {
                        final String mainPart = original.substring(0, dotIndex + 4);
                        return mainPart;
                    }
                }
                return original;
            }
        }
    }

    public static void main(String[] args) {
        System.out.println(formatAmount(new BigDecimal("123.45000")));   // 输出 "123.450"
        System.out.println(formatAmount(new BigDecimal("123.00000")));   // 输出 "123.000"
        System.out.println(formatAmount(new BigDecimal("123.45678")));   // 输出 "123.45678"
        System.out.println(formatAmount(new BigDecimal("-123.45678")));  // 输出 "-123.45678"
        System.out.println(formatAmount(new BigDecimal("123")));         // 输出 "123.000"
        System.out.println(formatAmount(new BigDecimal("123.10")));      // 输出 "123.100"
        System.out.println(formatAmount(new BigDecimal("123.1")));       // 输出 "123.100"
        System.out.println(formatAmount(new BigDecimal("0.001")));       // 输出 "0.001"
        System.out.println(formatAmount(new BigDecimal("0.0000001")));   // 输出 "0.0000001"
        System.out.println(formatAmount(new BigDecimal("0.123456789"))); // 输出 "0.123456789"
        System.out.println(formatAmount(new BigDecimal("-0.123")));      // 输出 "-0.123"
        System.out.println(formatAmount(new BigDecimal("-0.001")));      // 输出 "-0.001"
        System.out.println(formatAmount(new BigDecimal("0")));           // 输出 "0.000"
        System.out.println(formatAmount(new BigDecimal("0.00")));        // 输出 "0.000"
    }

}
